
package com.zsrt.day20170505.ch01;


public class LinkList {

	private Node head;
	
	public  LinkList(Node head){
		this.head = head;
	}
	

	
	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		return "LinkList [head=" + head + "]";
	}


	/**
	 * 添加节点
	 * @param node
	 */
	public  void addNode(Node node){
		Node p = head;
		
		while(true){
			if(p.getNext()==null){
				p.setNext(node);
				break;
			}
			if(p !=null){
				p = p.getNext();
			}
		}
	}
	
	/**
	 * 往parentNode 后面添加 insertNode 节点
	 * @param insertNode
	 * @param parentNode
	 */
	public void insertNode(Node insertNode,Node parentNode){
		
		Node p = this.head;
		
		while(true){
			//第一个节点
			p = p.getNext();
			
			if(p !=null){
				if(p.getNode() == parentNode.getNode()){
					
					//将insertNode 指向parentNode 的后一个节点
					insertNode.setNext(parentNode.getNext());
					//将parentNode节点指向 insertNode
					parentNode.setNext(insertNode);
					
					break;
				}
				
			}else{
				System.out.println("空链表");
				break;
			}
		}
	}
	
	/**
	 * 遍历节点
	 * @param linkList
	 */
	public void search(LinkList linkList){
		Node pNode= linkList.head;
		Node p = pNode.getNext();
		
		while(true){
			
			if(p ==null){
				System.out.println("空链表");
				break;
			}else{
				
				int i = p.getNode();
				System.out.print(i+"------>");
				p=p.getNext();
			}
			if(p==null){
				break;
			}
		}
		System.out.println();
	}
	
	/**
	 * 删除节点
	 * @param deleteNode
	 */
	public void deleteNode(Node deleteNode){
		Node p = this.head;
		
		while(true){
			if(p!=null){
				//找到要删除的节点的前一个节点
				if(p.getNext().getNode() == deleteNode.getNode()){
					//将当前节点的下一个节点    指向当前节点的下一个节点的下一个节点
					p.setNext(p.getNext().getNext());
					
					break;
				}
			}else{
				System.out.println("空链表");
				break;
			}
			p=p.getNext();
		}
	}
	
	/**
	 * 修改节点
	 * @param upNode  要修改的节点
	 * @param i     要修改的值
	 */
	public void updateNode(Node upNode,int i){
		Node p = this.head;
		
		while(true){
			if(p!=null){
				//循环找到要修改的节点
				if(p.getNext() == upNode){
					p.getNext().setNode(i);
					break;
				}
			}else{
				break;
			}
			p=p.getNext();
		}
	}
}
